package cn.finder.datatunnel.processor;

import java.io.IOException;

import cn.finder.datatunnel.DTException;

/***
 * 接收到客户端数据后处理机制接口
 * @author whl
 *
 */
public interface Processor {
	
	/***
	 * 表示该什么周期是否继续  或者 数据继续往下传递
	 */
	boolean getChain();
	
	void setChain(boolean chain);
	
	
	
	void setDataChannel(DataChannel dataChannel);
	
	/***
	 * 读取客户端通道数据前
	 * @return
	 */
	//byte[] beforeRead();
	
	
	/***
	 * 读取客户端socket数据
	 * @return
	 */
	byte[] read() throws DTException,IOException;
	
	
	/***
	 * 读取客户端通道数据之后执行
	 * @return
	 */
	byte[] afterRead(byte[] data);
	
	
	/***
	 * 发送给服务器数据之前
	 * @param data
	 * @return
	 */
	byte[] beforeSend(byte[] data);
	
	/***
	 * 发送给服务器端数据
	 * @return
	 */
	byte[] send(byte[] data) throws DTException,IOException;
	
	
	/***
	 * 发送给服务器数据之后 
	 * @param data
	 * @return
	 */
	byte[] afterSend(byte[] data);
	
	
	
	/***
	 * 返回到客户端数据之前
	 * @param data
	 * @return
	 */
	byte[] beforeWrite(byte[] data);
	
	
	/***
	 * 返回到客户端数据
	 * @return
	 */
	String write(byte[] data) throws DTException,IOException;
	
	
	/***
	 * 返回到客户端数据之后
	 * @param data
	 * @return
	 */
	String afterWrite(String value);
	
	
	
	DTException occurException(Throwable e);
	
}
